package com.heima;

import java.util.ArrayList;
import java.util.Scanner;

/**
 * 学生管理启动
 */

public class StudentManager {
    //获取用户输入
    Scanner sc = new Scanner(System.in);
    //创建集合，接收学生类
    ArrayList<Student> stu = new ArrayList<>();

    public void strat() {
        while (true) {
            //开始界面
            System.out.println("--------欢迎来到学生管理系统--------");
            System.out.println("1 添加学生");
            System.out.println("2 删除学生");
            System.out.println("3 修改学生");
            System.out.println("4 查看学生");
            System.out.println("5 退出");
            System.out.println("请输入您的选择:");
            int num = sc.nextInt();
            //判断用户输入
            switch (num) {
                case 1 -> addStudent();//添加学生
                case 2 -> deleteStudent();//删除学生
                case 3 -> updateStudent();//修改学生
                case 4 -> showStudent();//查找学生
                case 5 -> {
                    System.out.println("再见");
                    return;
                    //System.exit(0);
                    //isRun = false
                }
                //输入的功能不是1-5，重新输入
                default -> System.out.println("输入有误，请重新输入");
            }
        }
    }

    private void updateStudent() {
        System.out.println("请输入学生学号");
        String id = sc.next();
        //根据删除的学号调用getIndexById()，获取对应索引
        int index = getIndexById(id);
        if (index < 0) {
            System.out.println("该学生不存在");
        } else {
            System.out.println("请输入学生姓名");
            String name = sc.next();
            System.out.println("请输入学生年龄");
            int age = sc.nextInt();
            System.out.println("请输入学生生日");
            String birth = sc.next();
            //根据索引找到要修改的学生
            Student s = stu.get(index);
            s.setAge(age);
            s.setName(name);
            s.setsId(id);
            s.setBirthday(birth);
            System.out.println("修改成功");
        }
    }

    /**
     * 根据输入学号删除学生
     */
    private void deleteStudent() {
        System.out.println("请输入要删除的学生的学号");
        String id = sc.next();
        //根据删除的学号调用getIndexById()，获取对应索引
        int index = getIndexById(id);
        if (index < 0) {
            System.out.println("该学生不存在");
        } else {
            stu.remove(index);
            System.out.println("删除成功");
        }
    }

    private void showStudent() {
        System.out.println("学号   姓名       年龄    生日");
        for (int i = 0; i < stu.size(); i++) {
            Student ss = stu.get(i);
            System.out.println(ss.getsId() + "  " + ss.getName() + "       " + ss.getAge() + "  " + ss.getBirthday());
        }
    }

    //添加学生
    private void addStudent() {
        System.out.println("请输入学生学号");
        String id;
        while (true) {
            id = sc.next();
            //小于0代表不存在重复
            if (getIndexById(id) < 0) {
                break;
            } else {
                System.out.println("该学号学生已经存在，请重新输入学号：");
            }
        }
        System.out.println("请输入学生姓名");
        String name = sc.next();
        System.out.println("请输入学生年龄");
        int age = sc.nextInt();
        System.out.println("请输入学生生日");
        String birth = sc.next();
        //将录入的信息，存入新的学生类中
        Student s = new Student(id, name, age, birth);
        //将学生类存入集合中
        stu.add(s);
        System.out.println("添加成功");
    }

    /**
     * 根据学号获取学生对应的索引
     *
     * @param id
     * @return 存在返回索引，不存在返回-1
     */
    private int getIndexById(String id) {
        //遍历集合
        for (int i = 0; i < stu.size(); i++) {
            Student s = stu.get(i);
            if (s.getsId().equals(id)) {
                return i;
            }
        }
        //如果程序走到这里，代表该学号不存在，返回-1
        return -1;
    }
}
